/**
 * @file bsp_iwdg.c
 * @brief 独立看门狗驱动
 * @author wangh (wanghuan3037@fiberhome.com)
 * @version 1.0
 * @date 2020-11-13
 * @copyright Copyright (c) 2020  烽火通信
 ***************************************************************
 * @par 修改日志:
 * <table>
 * <tr><th>Date       <th>Version  <th>Author  <th>Description
 * <tr><td>2020-11-13 <td>1.0      <td>wangh   <td>内容
 * </table>
 */ 
#include "bsp_iwdg.h"
#include <stdint.h>
#ifdef STM32F10X
#include "stm32f10x.h"
#elif defined GD32F10X
#include "gd32f10x.h"
#endif

#undef LOG_LEVEL_
#define LOG_LEVEL_  LOG_LVL_ASSERT
#include "bsp_log.h"

/**
 * @brief 独立看门狗初始化 \n
 * 看门狗一旦启用无法停止除非复位
 * @param  period   监测周期（1s ~ 6s）
 */
void iwdg_init(uint8_t period)
{
    if (period > 6)
        period = 6;

#ifdef STM32F10X
    IWDG_WriteAccessCmd( IWDG_WriteAccess_Enable ); /* 使能预分频寄存器PR和重装载寄存器RLR可写 */

    /* iwdg由独立的RC提供时钟 40KHz */
    IWDG_SetPrescaler( IWDG_Prescaler_64 ); /* 设置预分频器值 625Hz */
    IWDG_SetReload( period*625 );           /* 设置重装载寄存器值 */

    IWDG_ReloadCounter();       /* 把重装载寄存器的值放到计数器中 */
    IWDG_Enable();              /* 使能 IWDG */

#elif defined GD32F10X
    rcu_osci_on(RCU_IRC40K);
    while(ERROR == rcu_osci_stab_wait(RCU_IRC40K));

    fwdgt_config( period*625, FWDGT_PSC_DIV64 );
    fwdgt_enable();
#endif
}

/**
 * @brief 喂狗 \n
 * 把重装载寄存器的值放到计数器中，喂狗，防止IWDG复位
 */
void iwdg_feed(void)
{
#ifdef STM32F10X
    IWDG_ReloadCounter();
#elif defined GD32F10X
    fwdgt_counter_reload();
#endif
}


/*********** (C) COPYRIGHT 2020 FiberHome *****END OF FILE****/
